import { defineStore } from "pinia";
import { debounce } from "lodash";

export const useChatStore = defineStore("chat", {
  state: () => ({
    // 接待列表（Map结构提升访问性能）
    userGroups: {
      active: new Map(), // 接待中（按时间排序）
      waiting: new Map(), // 排队中
      closed: new Map(), // 已接待
    },
    // 当前选中用户
    currentUserId: "",
  }),
  actions: {
    // 新增用户
    addUser(user) {
      // 检查用户是否已存在
      const existingUser = this.findUser(user.id);
      if (existingUser) {
        return false;
      }

      // 根据用户状态分配到对应分组
      const status = user.status || 'waiting';
      if (!this.userGroups[status]) {
        console.warn(`未知的用户状态: ${status}`);
        return false;
      }

      // 设置用户初始属性
      user.last_chat_time = user.last_chat_time || Date.now();
      user.last_chat_msg = user.last_chat_msg || '';

      // 添加用户到对应分组
      this.userGroups[status].set(user.id, user);
      
      // 触发排序
      this.triggerSort(status);
      
      return true;
    },

    // 查找用户
    findUser(userId, status) {
      // 如果没有指定status，则返回null
      if (!status) return null;
      
      // 检查status是否有效
      if (!this.userGroups[status]) {
        console.warn(`未知的用户状态: ${status}`);
        return null;
      }

      // 直接从指定状态的Map中获取用户
      return this.userGroups[status].get(userId) || null;
    },
    // 更新用户最后消息时间（核心方法）
    updateUserLastChat(userId, msg, timestamp) {
      const user = this.findUser(userId);
      if (user) {
        user.last_chat_msg = msg;
        user.last_chat_time = timestamp;
        this.triggerSort(user.status); // 触发排序
      }
    },
    // 防抖排序（300ms合并操作）
    triggerSort: debounce(function (status) {
      const users = Array.from(this.userGroups[status].values()).sort(
        (a, b) => b.last_chat_time - a.last_chat_time
      );
      this.userGroups[status] = new Map(users.map((u) => [u.id, u]));
    }, 300),
  },
});
